package edu.software.PBL_Management_System.service.impl;

import edu.software.PBL_Management_System.entity.User;
import edu.software.PBL_Management_System.mapper.UserMapper;
import edu.software.PBL_Management_System.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class UserServiceImpl implements UserService {

    @Autowired // 自动注入
    private UserMapper userMapper;

    /*
     * 用户登录
     */
    @Override
    public User login(String account, String password) {
        //1.根据手机号或邮箱查询数据库中的数据
        User user = userMapper.findByEmailOrPhone(account, password);
        //2.输出报错信息
        if(user == null){
            //账户不存在
            return null;
        }
        if(!user.getPassword().equals(password)){
            //密码错误
            return null;
        }
        //3.返回实体对象
        return user;
    }

    /*
     * 用户邮箱或手机号登录
     */
    @Override
// UserServiceImpl.java 修复版本

    public User emailOrPhoneLogin(String account) {
        try {
            log.info("开始查询用户，账号：{}", account);

            if (account == null || account.trim().isEmpty()) {
                log.warn("账号参数为空");
                return null;
            }

            // 方案1：使用修复后的 accountExist 方法
            boolean exists = userMapper.accountExist(account);
            if (!exists) {
                log.info("用户不存在，账号：{}", account);
                return null;
            }

            // 如果存在，使用新的方法查询完整用户信息（不需要密码）
            User user = userMapper.findUserByAccount(account);
            log.info("查询到用户：{}", user != null ? user.getId() : "null");
            return user;

        } catch (Exception e) {
            log.error("查询用户失败，账号：{}，错误：{}", account, e.getMessage(), e);
            return null;
        }
    }

  /*
     * 用户注册
     */
    @Override
    public void save(User user) {
        // 1.调用 UserMapper 的插入方法，保存用户信息到数据库
        int rows = userMapper.insert(user);

        // 2.判断是否插入成功
        if (rows == 0) {
            throw new RuntimeException("用户保存失败");
        }

        // 3.获取插入后的用户（包含数据库生成的ID）
        User savedUser = userMapper.findUserByAccount(user.getEmail());
        if (savedUser == null) {
            throw new RuntimeException("用户保存后未找到");
        }

        // 4.更新传入的user对象的ID
        user.setId(savedUser.getId());
    }
}
